iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0

嗨大家今天過得好嗎?昨天了解了 Facebook 推出的 Shimmer library 簡單的使用方式,只需要 ShimmerFrameLayout 加上 place holder 兩種 layout 很簡單,但 place holder 的問題是不同頁面的列表起始高度並不同,有些頁面除了 Toolbar 外還會有其他的元件所以就要另外設定各個頁面的列表起始高度,另外看似簡單的 ShimmerFrameLayout 好像只要供在 Activity 的 layout 再叫他做事就好,但也代表 layout 的 View hirerachy 又多了一層,繪製 layout 的時間又變得更久了!工程師就是懶惰,有沒有不改動 Code base 也能達成 Skelton 的目的呢?你可以改選擇 Skelton library

懶人救星

雖然 Skelton 和 Shimmer 兩個 library 都需要另外寫 place holder layout ( 原來誤會 Skelton 神通廣大到可以直接拿 ViewHolder 的 layout 來用,但想想不對啊,原來 ViewHolder 都沒有設定顯示文字成灰底長條背景,那到底要叫 Skelton 怎麼辦到? ),但不同的是我們不用像 Shimmer 一樣在不同頁面煩惱 RecyclerView 的起始高度不同,Skelton 是值接綁定 RecyclerView 和 RecyclerView.Adapter 的,綁定後會產生 RecyclerViewSkeletonScreen 再去呼叫 show() 或是 hide() 的 method 就可以控制動畫開始和動畫消失。

也許有些頁面並不是列表但也想要在載入前顯示 shimmer 的效果,Skelton 也有處理頁面的綁定,針對頁面的 rootView 綁定 place holder layout 後也是用 show() 和 hide() 控制。Skelton library 的另外一個優點是不用在 View hirerachy 中另外塞入一個元件,只要在原來的 layout 中直接綁定 RecyclerView 就好了,和原來的 Code base 比較兼容。

但 Shimmer 和 Skelton 都要另外為了 place holder 新增 layout,有沒有辦法讓 library 直接根據 ViewHolder 產生 place holder layout 呢?還有第三種選擇 Skelton Android

連 place holder 都省了?

為了達到不要另外產生一份 place holder 的 XML,Skelton Android 的實現方式是要讓 Adapter 繼承自 AdapterSkeleton,而 AdapterSkelton 當然沒有那麼神可以知道 View 的高度,因此就要在 ViewHolder 的 layout 中加上 SkeltonVIew 並把每個元件包起來,長寬都使用 wrap_content 的設定才能知道每個元件的高度。休淡幾勒,我這是省了 place holder 的畫面但是把成本都轉嫁到 ViewHolder 身上啊!果然天下沒有白吃的午餐,該是誰做的事就不能偷懶。

這次找資料才發現做 Skelton 效果的 library 真的很多,但實現方法卻因 library 而有很大差異,光是 Shimmer、Skelton 和 Skelton Android 的用法就差很多,三者比較下來我覺得 Skelton 真的比較輕量也不會對 code base 有太大的改動,但每個專案的架構都不同,也許可以多了解各個 library 後再選擇比較適合的,也歡迎有推薦不錯的 library 可以留言分享喔!如果喜歡今天分享的內容的邦友請繼續關注「打造一個厲害的普通 Android App - 使用者體驗優化」的主題,我們明天見。


上一篇
Skelton(1):Shimmer
下一篇
動起來 (1):Animated icon
系列文
打造一個厲害的普通 Android App - 使用者體驗優化16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言